'use strict'
/**
成员管理
*/
let urljoin = require("url-join"),
	_ = require("lodash"),
	template = require("es6-template-strings"),
	log4js = require('log4js'),
	logger = log4js.getLogger('qywx-api'),
	debug = require('debug')('qywx-api'),
	rp = require("request-promise"),
	URLs = require('./urls.js').URLs();

module.exports = function() {
	return {
		/*
			*获取标签成员列表
				params{
						参数	必须	说明
						access_token	是	调用接口凭证
				}
			*/
		getTagMemberList: function(accessToken, tagid, cb) {
				logger.error("获取标签成员啊: ", tagid);
				let targetUrl =
					template(URLs.CONTACTS_TAG_GET, {
						accessToken: accessToken
					});
				debug("获取标签成员:", targetUrl);
				let requestData = {
					accessToken: accessToken,
					tagid: tagid
				};
				var rpOptions = {
					uri: targetUrl,
					method: "GET",
					qs: requestData,
					json: true
				};
				/**
				 * 返回结果
									 {
						"errcode": 0,
						"errmsg": "ok",
						"userlist": [
								{
										"userid": "zhangsan",
										"name": "李四"
								}
						],
						"partylist": [2]
						}
				 */
				rp(rpOptions).then(function(data) {
						if (data.errcode > 0) {
							logger.error("request error: ", data);
							return cb(new Error(data.errmsg));
						}
						return cb(null, data);
					})
					.catch(function(err) {
						logger.error("request error: ", err);
						return cb(err);
					});

			}
			/*
			*获取标签列表
				params{
						参数	必须	说明
						access_token	是	调用接口凭证
				}
			*/
			,
		getTagList: function(accessToken, cb) {
				let targetUrl =
					template(URLs.CONTACTS_TAG_LIST, {
						accessToken: accessToken
					});
				debug("获取标签列表:", targetUrl);
				let requestData = {
					accessToken: accessToken,
				};
				var rpOptions = {
					uri: targetUrl,
					method: "GET",
					qs: requestData,
					json: true
				};
				/**
				 * 返回结果
							 {
					    "errcode": 0,
					    "errmsg": "ok",
					    "taglist":[
					       {"tagid":1,"tagname":"a"},
					       {"tagid":2,"tagname":"b"}
					    ]
					 }
				 */
				rp(rpOptions).then(function(data) {
						if (data.errcode > 0) {
							logger.error("request error: ", data);
							return cb(new Error(data.errmsg));
						}
						return cb(null, data);
					})
					.catch(function(err) {
						logger.error("request error: ", err);
						return cb(err);
					});

			}
			/*
			*创建标签
				params{
						参数	必须	说明
						access_token	是	调用接口凭证
						tagname	是	标签名称，长度为1~64个字节，标签名不可与其他标签重名。
						tagid	否	标签id，整型，指定此参数时新增的标签会生成对应的标签id，不指定时则以目前最大的id自增。
				}
			*/
			,
		createTag: function(accessToken, tagname, tagid, cb) {
				let targetUrl =
					template(URLs.CONTACTS_TAG_CREATE, {
						accessToken: accessToken
					});
				debug("创建标签:", targetUrl);
				let requestData = {
					accessToken: accessToken,
					tagname: tagname,
					tagid: tagid
				};
				var rpOptions = {
					uri: targetUrl,
					method: "POST",
					body: requestData,
					json: true
				};
				/**
				 * 返回结果
				 {
				    "errcode": 0,
				    "errmsg": "created"
				    "tagid": "1"
				 }
				 */
				rp(rpOptions).then(function(data) {
						if (data.errcode > 0) {
							logger.error("request error: ", data);
							return cb(new Error(data.errmsg));
						}
						return cb(null, data);
					})
					.catch(function(err) {
						logger.error("request error: ", err);
						return cb(err);
					});

			}
			/*
			*更新标签
				params{
						参数	必须	说明
						access_token	是	调用接口凭证
						tagname	是	标签名称，长度为1~64个字节，标签名不可与其他标签重名。
						tagid	否	标签id，整型，指定此参数时新增的标签会生成对应的标签id，不指定时则以目前最大的id自增。
				}
			*/
			,
		updateTag: function(accessToken, tagname, tagid, cb) {
				let targetUrl =
					template(URLs.CONTACTS_TAG_UPDATE, {
						accessToken: accessToken
					});
				debug("更新标签:", targetUrl);
				let requestData = {
					accessToken: accessToken,
					tagname: tagname,
					tagid: tagid
				};
				var rpOptions = {
					uri: targetUrl,
					method: "POST",
					body: requestData,
					json: true
				};
				/**
				 * 返回结果
				 {
				   "errcode": 0,
				   "errmsg": "updated"
				}
				 */
				rp(rpOptions).then(function(data) {
						if (data.errcode > 0) {
							logger.error("request error: ", data);
							return cb(new Error(data.errmsg));
						}
						return cb(null, data);
					})
					.catch(function(err) {
						logger.error("request error: ", err);
						return cb(err);
					});

			}
			/*
			*删除标签
				params{
						参数	必须	说明
						参数	必须	说明
						access_token	是	调用接口凭证
						tagid	是	标签ID
				}
			*/
			,
		deleteTag: function(accessToken, tagid, cb) {
			let targetUrl =
				template(URLs.CONTACTS_TAG_DELETE, {
					accessToken: accessToken,
					tagid: tagid
				});
			debug("删除标签:", targetUrl);
			let requestData = {
				accessToken: accessToken,
				tagid: tagid
			};
			var rpOptions = {
				uri: targetUrl,
				method: "GET",
				qs: requestData,
				json: true
			};
			/**
			 * 返回结果
			 {
				 "errcode": 0,
				 "errmsg": "updated"
			}
			 */
			rp(rpOptions).then(function(data) {
					if (data.errcode > 0) {
						logger.error("request error: ", data);
						return cb(new Error(data.errmsg));
					}
					return cb(null, data);
				})
				.catch(function(err) {
					logger.error("request error: ", err);
					return cb(err);
				});

		}
	}

}